
package org.redisson.client.codec;

import java.io.IOException;

import org.redisson.client.handler.State;
import org.redisson.client.protocol.Decoder;

import io.netty.buffer.ByteBuf;

/**
 * long编码格式
 */
/**
 * LongCodec类继承自StringCodec，用于对长整型（Long）数据进行编码和解码。
 */
public class LongCodec extends StringCodec {

    /**
     * LongCodec的单例实例。
     * 提供了一个全局的、无需重复实例化的访问点来使用LongCodec。
     */
    public static final LongCodec INSTANCE = new LongCodec();

    /**
     * 自定义解码器，用于将字节缓冲区中的数据解码为Long类型。
     * 这是一个匿名内部类，实现了Decoder接口。
     */
    private final Decoder<Object> decoder = new Decoder<Object>() {
        @Override
        public Object decode(ByteBuf buf, State state) throws IOException {
            // 调用父类的getValueDecoder方法解码字符串
            String str = (String) LongCodec.super.getValueDecoder().decode(buf, state);
            // 将解码后的字符串转换为Long类型并返回
            return Long.valueOf(str);
        }
    };

    /**
     * 获取解码器。
     * 该方法覆盖了父类的getValueDecoder方法，返回一个专门用于解码Long类型数据的解码器。
     *
     * @return 解码器对象。
     */
    @Override
    public Decoder<Object> getValueDecoder() {
        return decoder;
    }

}

